<?php
function arrayGetSubset($arr, $start, $end, $step = 1, $by_value = false) {
/**
* @arr - массив
* @start - начало выборки
* @end - конец выборки
* @step - инкремент между элементами последовательности. step должен быть положительным числом
* @by_value - если этот параметр равен true, то выбор подмножества осуществляется не по ключам, а по значениям
*/
$keys = range($start, $end);
if ($step > 1) {
$step_keys = range($start, count($keys_res) - 1, $step);
}
return $res;
}
// test
$arr = [0 => "a", 1 => "b", 4 => "c", 6 => "d", 9 => "e", 13 => "f", 14 => "g", 16 => "h", 17 => "i", 19 => "j", 20 => "k", 21 => "l"];
print_r(arrayGetSubset
($arr, 0, 20)); print_r(arrayGetSubset
($arr, 0, 20, 2)); print_r(arrayGetSubset
($arr, 0, 20, 3));
//$arr = [0, 1, 3, 5, 7, 9, 10, 11, 12, 14, 15, 18, 20, 21, 22];
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22];
print_r(arrayGetSubset
($arr, 1, 20, 1, true)); print_r(arrayGetSubset
($arr, 1, 20, 2, true)); print_r(arrayGetSubset
($arr, 1, 20, 3, true));
PD9waHAKCmZ1bmN0aW9uIGFycmF5R2V0U3Vic2V0KCRhcnIsICRzdGFydCwgJGVuZCwgJHN0ZXAgPSAxLCAkYnlfdmFsdWUgPSBmYWxzZSkgewogICAgCiAgICAvKioKICAgICAqIEBhcnIgLSDQvNCw0YHRgdC40LIKICAgICAqIEBzdGFydCAtINC90LDRh9Cw0LvQviDQstGL0LHQvtGA0LrQuAogICAgICogQGVuZCAtINC60L7QvdC10YYg0LLRi9Cx0L7RgNC60LgKICAgICAqIEBzdGVwIC0g0LjQvdC60YDQtdC80LXQvdGCINC80LXQttC00YMg0Y3Qu9C10LzQtdC90YLQsNC80Lgg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC4LiBzdGVwINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQvCDRh9C40YHQu9C+0LwKICAgICAqIEBieV92YWx1ZSAtINC10YHQu9C4INGN0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0YDQsNCy0LXQvSB0cnVlLCDRgtC+INCy0YvQsdC+0YAg0L/QvtC00LzQvdC+0LbQtdGB0YLQstCwINC+0YHRg9GJ0LXRgdGC0LLQu9GP0LXRgtGB0Y8g0L3QtSDQv9C+INC60LvRjtGH0LDQvCwg0LAg0L/QviDQt9C90LDRh9C10L3QuNGP0LwKICAgICAqLwogICAgCiAgICAka2V5cyA9IHJhbmdlKCRzdGFydCwgJGVuZCk7CiAgICAKICAgICRyZXMgPSAkYnlfdmFsdWUgPyBhcnJheV9pbnRlcnNlY3QoJGFyciwgJGtleXMpIDogYXJyYXlfaW50ZXJzZWN0X2tleSgkYXJyLCBhcnJheV9mbGlwKCRrZXlzKSk7CiAgICAKICAgIGlmICgkc3RlcCA+IDEpIHsKICAgICAgICAKICAgICAgICAka2V5c19yZXMgPSAkYnlfdmFsdWUgPyAkcmVzIDogYXJyYXlfa2V5cygkcmVzKTsKICAgICAgICAkc3RlcF9rZXlzID0gcmFuZ2UoJHN0YXJ0LCBjb3VudCgka2V5c19yZXMpIC0gMSwgJHN0ZXApOwogICAgICAgICRzdGVwZWQgPSBhcnJheV9pbnRlcnNlY3Rfa2V5KCRrZXlzX3JlcywgYXJyYXlfZmxpcCgkc3RlcF9rZXlzKSk7CiAgICAgICAgCiAgICAgICAgJHJlcyA9ICRieV92YWx1ZSA/IGFycmF5X2ludGVyc2VjdCgkcmVzLCAkc3RlcGVkKSA6IGFycmF5X2ludGVyc2VjdF9rZXkoJHJlcywgYXJyYXlfZmxpcCgkc3RlcGVkKSk7CiAgICAgICAgCiAgICB9CiAgICAKICAgIHJldHVybiAkcmVzOwogICAgCn0KCi8vIHRlc3QKCiRhcnIgPSBbMCA9PiAiYSIsIDEgPT4gImIiLCA0ID0+ICJjIiwgNiA9PiAiZCIsIDkgPT4gImUiLCAxMyA9PiAiZiIsIDE0ID0+ICJnIiwgMTYgPT4gImgiLCAxNyA9PiAiaSIsIDE5ID0+ICJqIiwgMjAgPT4gImsiLCAyMSA9PiAibCJdOwoKcHJpbnRfcihhcnJheUdldFN1YnNldCgkYXJyLCAwLCAyMCkpOwpwcmludF9yKGFycmF5R2V0U3Vic2V0KCRhcnIsIDAsIDIwLCAyKSk7CnByaW50X3IoYXJyYXlHZXRTdWJzZXQoJGFyciwgMCwgMjAsIDMpKTsKCi8vJGFyciA9IFswLCAxLCAzLCA1LCA3LCA5LCAxMCwgMTEsIDEyLCAxNCwgMTUsIDE4LCAyMCwgMjEsIDIyXTsKJGFyciA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMl07CgpwcmludF9yKGFycmF5R2V0U3Vic2V0KCRhcnIsIDEsIDIwLCAxLCB0cnVlKSk7CnByaW50X3IoYXJyYXlHZXRTdWJzZXQoJGFyciwgMSwgMjAsIDIsIHRydWUpKTsKcHJpbnRfcihhcnJheUdldFN1YnNldCgkYXJyLCAxLCAyMCwgMywgdHJ1ZSkpOw==